package cst.a729yt.zyfypt_729yt;

import java.util.List;

import cst.a729yt.zyfypt_729yt.Bean.ArticleBean;
import cst.a729yt.zyfypt_729yt.Bean.LoginBean;
import cst.a729yt.zyfypt_729yt.Bean.TcaseBean;
import cst.a729yt.zyfypt_729yt.Bean.Tcase_ProjectBean;
import cst.a729yt.zyfypt_729yt.Bean.TopicVideoBean;
import cst.a729yt.zyfypt_729yt.Bean.TwareBean;
import cst.a729yt.zyfypt_729yt.Bean.VideoBean;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.converter.scalars.ScalarsConverterFactory;

/**
 * Created by lenovo on 2017/5/8.
 */

public class ResModel<T> implements ytface {
    private Retrofit retrofit;
    private ResService service;

    private static final String BASE_URL="http://amicool.neusoft.edu.cn/";
    private static final String SESSION_ID="tlb40fscfkka9q4eaatkvtajk2";


    public ResModel(String type) {
        if(type.equals("gson")){
            retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        else{
            retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .addConverterFactory(ScalarsConverterFactory.create())
                    .build();
        }
        service = retrofit.create(ResService.class);
    }

    @Override
    public void login(String u, String p, final ytListener l) {
        Call<LoginBean> call = service.login(u, p);
        call.enqueue(new Callback<LoginBean>() {
            @Override
            public void onResponse(Call<LoginBean> call, Response<LoginBean> response) {
                l.onResponse(response.body());
            }

            @Override
            public void onFailure(Call<LoginBean> call, Throwable t) {
                l.onFail(t.toString());
            }
        });
    }

    @Override
    public void reg(String u, String p, String telephone, int roleid, String email, String realname, final ytListener l) {
        Call<String> call = service.reg(u, p, telephone, roleid, realname, email);
        call.enqueue(new Callback<String>() {
            @Override
            public void onResponse(Call<String> call, Response<String> response) {
                l.onResponse(response.body());
            }

            @Override
            public void onFailure(Call<String> call, Throwable t) {
                l.onFail(t.toString());
            }
        });
    }

    @Override
    public void getList(String mod, int page, final ytListener l) {
        switch (mod){
            case "video" :
                Call<List<VideoBean>> call_video_new = service.getVideoList("video", page, SESSION_ID);
                call_video_new.enqueue(new Callback<List<VideoBean>>() {
                    @Override
                    public void onResponse(Call<List<VideoBean>> call, Response<List<VideoBean>> response) {
                        l.onResponse(response.body());
                    }

                    @Override
                    public void onFailure(Call<List<VideoBean>> call, Throwable t) {
                        l.onFail(t.toString());
                    }
                });
                break;

            case "article" :
                Call<List<ArticleBean>> call_article = service.getArticleList(mod, page, SESSION_ID);
                call_article.enqueue(new Callback<List<ArticleBean>>() {
                    @Override
                    public void onResponse(Call<List<ArticleBean>> call, Response<List<ArticleBean>> response) {
                        l.onResponse(response.body());
                    }

                    @Override
                    public void onFailure(Call<List<ArticleBean>> call, Throwable t) {
                        l.onFail(t.toString());
                    }
                });
                break;
            case "tware" :
                Call<List<TwareBean>> call_tware = service.getTwareList(mod, page, SESSION_ID);
                call_tware.enqueue(new Callback<List<TwareBean>>() {
                    @Override
                    public void onResponse(Call<List<TwareBean>> call, Response<List<TwareBean>> response) {
                        l.onResponse(response.body());
                    }

                    @Override
                    public void onFailure(Call<List<TwareBean>> call, Throwable t) {
                        l.onFail(t.toString());
                    }
                });
                break;
            case "topic" :
                Call<List<TopicVideoBean>> call_topic = service.getVideotopicList("video", page, SESSION_ID);
                call_topic.enqueue(new Callback<List<TopicVideoBean>>() {
                    @Override
                    public void onResponse(Call<List<TopicVideoBean>> call, Response<List<TopicVideoBean>> response) {
                        l.onResponse(response.body());
                    }

                    @Override
                    public void onFailure(Call<List<TopicVideoBean>> call, Throwable t) {
                        l.onFail(t.toString());
                    }
                });
                break;
            case "tcase" :
                Call<List<TcaseBean>> call_tcase = service.getTcaseList(mod, page, SESSION_ID);
                call_tcase.enqueue(new Callback<List<TcaseBean>>() {
                    @Override
                    public void onResponse(Call<List<TcaseBean>> call, Response<List<TcaseBean>> response) {
                        l.onResponse(response.body());
                    }

                    @Override
                    public void onFailure(Call<List<TcaseBean>> call, Throwable t) {
                        l.onFail(t.toString());
                    }
                });
                break;
            case "project" :
                Call<List<Tcase_ProjectBean>> call_poj = service.getTcasepojList(mod, page, SESSION_ID);
                call_poj.enqueue(new Callback<List<Tcase_ProjectBean>>() {
                    @Override
                    public void onResponse(Call<List<Tcase_ProjectBean>> call, Response<List<Tcase_ProjectBean>> response) {
                        l.onResponse(response.body());
                    }
                    @Override
                    public void onFailure(Call<List<Tcase_ProjectBean>> call, Throwable t) {
                        l.onFail(t.toString());
                    }
                });
                break;
            default:
                break;
        }
    }

    @Override
    public void getDetail(String mod, int id, String sessionID, ytListener l) {

    }

}
